﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Process.Bovespa.Negocio.Server.Bovespa.Cliente.Cliente;

namespace Sinacor.Process.Bovespa.Negocio.Server.Communication.Translator.DataContractToProcessEntity
{
    public class Cliente
    {
        public Cliente() { }

        /// <summary>
        /// ToCliente
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public ProcessEntity.Cliente ToCliente(ClienteResponse from)
        {
            ProcessEntity.Cliente retorno = new ProcessEntity.Cliente();

            if (from == null || !from.Codigo.HasValue)
                return null;

            retorno.AdministradoConcorrente = from.IsAdministradoConcorrente;
            retorno.Apelido = from.Apelido;
            retorno.Broker = from.ClienteBroker;
            retorno.Codigo = from.Codigo;
            retorno.IsBloqueado = from.isBloqueado;

            retorno.CodigoClienteInstitucional = from.CodigoClienteInstitucional;
            retorno.ComplementoNome = from.ComplementoNome;
            retorno.Digito = from.DigitoVerificador;
            retorno.Nome = from.Nome;
            retorno.NomeBroker = from.Nome;
            retorno.ClienteBroker = from.isClienteBroker;
            retorno.OperaCarteiraPropria = from.isOperacaoCarteiraCliente;
            retorno.PercentualCorretagemPrincipal = from.PercentualReducaoAcrescimo;
            retorno.PercentualCorretagemTotal = from.PercentualTotal;
            retorno.PessoaVinculada = from.isPessoaVinculada;
            retorno.Qualificado = from.isClienteQualificado;

            switch (from.Situacao.Value)
            {
                case TipoSituacao.Ativo:
                    retorno.Situacao = ProcessEntity.Enum.TipoSituacao.Ativo;
                    break;
                case TipoSituacao.Inativo:
                    retorno.Situacao = ProcessEntity.Enum.TipoSituacao.Inativo;
                    break;
            }

            retorno.CodigoAssessor = from.CodigoAssesor;
            retorno.CodigoCustodiante = from.CodigoCustodiante;
            retorno.CodigoGrupo = from.CodigoGrupo;

            switch (from.TipoPessoa)
            {
                case TipoPessoa.Fisica:
                    retorno.TipoPessoa = ProcessEntity.Enum.TipoPessoa.Fisica;
                    break;
                case TipoPessoa.Juridica:
                    retorno.TipoPessoa = ProcessEntity.Enum.TipoPessoa.Juridica;
                    break;
            }

            return retorno;
        }

        /// <summary>
        /// ToCliente - LIST
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public List<ProcessEntity.Cliente> ToCliente(List<ClienteResponse> from)
        {

            List<ProcessEntity.Cliente> lista = new List<ProcessEntity.Cliente>();
            ProcessEntity.Cliente item = null;

            if (from == null)
                return null;

            foreach (ClienteResponse inLista in from)
            {
                item = this.ToCliente(inLista);
                lista.Add(item);
            }

            return lista;
        }
    }
}
